#采用多阶段构建
#第一阶段（builder）：用node环境编译代码(yarn build)，生产静态文件
#第二阶段：基于轻量的nginx:alpine(仅~23MB)运行，只复制编译后的build目录，镜像体积可从几百MB缩小到~30MB


# 构建阶段
FROM node:20-alpine AS builder

WORKDIR /app/client

# 复制 package.json 和 yarn.lock（先复制依赖文件，利用 Docker 缓存）
#COPY package.json yarn.lock ./
COPY package.json ./

#因为yarn build需要构建工具：--production=false 安装包括devDependencies的所有依赖
#构建完成后删除node_modules和yarn缓存，减少中间层体积
#--frozen-lockfile确保依赖版本一致

#RUN yarn install --production=false --frozen-lockfile \
#    && rm -rf /root/.npm /root/.yarn /usr/local/share./cache/yarn/v6 # 清理缓存

RUN yarn install --production=false \
    && rm -rf /root/.npm /root/.yarn /usr/local/share./cache/yarn/v6 # 清理缓存

COPY . .

RUN yarn build \
    && rm -rf node_modules # 清理构建阶段的依赖,减少中间层体积


# 运行阶段
FROM nginx:alpine

COPY --from=builder /app/client/dist /usr/share/nginx/html

# 把自定义的nginx.conf配置放进去，包含自己的优化，比如优化静态资源缓存、压缩等
COPY nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 8000

CMD ["nginx", "-g", "daemon off;"]

